﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace JerrodSoft.Tests.TestClasses
{
    public enum MyMadeUpEnum
    {
        A,
        B,
        C,
        D
    }

    public class ClassWithAllPrimitiveTypes
    {
        public Int16 Int16 { get; set; }
        public Int32 Int32 { get; set; }
        public Int64 Int64 { get; set; }
        public double Double { get; set; }
        public float Float { get; set; }
        public char Char { get; set; }
        public Guid Guid { get; set; }
        public string String { get; set; }
        public byte Byte { get; set; }
        public UInt16 UInt16 { get; set; }
        public UInt32 UInt32 { get; set; }
        public UInt64 UInt64 { get; set; }
        public DateTime DateTime { get; set; }
        public bool Bool { get; set; }
        public decimal Decimal { get; set; }
        public object Object { get; set; }
        public MyMadeUpEnum MyMadeUpEnum { get; set; }

        public List<Int16> ListOfInt16 { get; set; }
        public List<Int32> ListOfInt32 { get; set; }
        public List<Int64> ListOfInt64 { get; set; }
        public List<double> ListOfDouble { get; set; }
        public List<float> ListOfFloat { get; set; }
        public List<char> ListOfChar { get; set; }
        public List<Guid> ListOfGuid { get; set; }
        public List<string> ListOfString { get; set; }
        public List<byte> ListOfByte { get; set; }
        public List<UInt16> ListOfUInt16 { get; set; }
        public List<UInt32> ListOfUInt32 { get; set; }
        public List<UInt64> ListOfUInt64 { get; set; }
        public List<DateTime> ListOfDateTime { get; set; }
        public List<bool> ListOfBool { get; set; }
        public List<decimal> ListOfDecimal { get; set; }
        public List<object> ListOfObject { get; set; }
        public List<MyMadeUpEnum> ListOfMyMadeUpEnum { get; set; }

        public static ClassWithAllPrimitiveTypes GenerateMock()
        {
            return new ClassWithAllPrimitiveTypes()
            {
                Bool = true,
                Byte = new byte(),
                Char = 'z',
                DateTime = DateTime.Now,
                Decimal = (decimal)12.123,
                Double = 11.112,
                Float = (float)1.11222222,
                Guid = Guid.NewGuid(),
                Int16 = Int16.MaxValue,
                Int32 = Int32.MaxValue,
                Int64 = Int64.MaxValue,
                Object = "this is a string represented as an object!  MUAH!",
                String = "this is just a plain ole string.",
                UInt16 = UInt16.MaxValue,
                UInt32 = UInt32.MaxValue,
                UInt64 = UInt64.MaxValue,
                MyMadeUpEnum = TestClasses.MyMadeUpEnum.B,
                ListOfBool = new List<bool>() { true, false, true, true },
                ListOfByte = new List<byte>() { new byte(), new byte() },
                ListOfChar = new List<char>() { 'A', 'a', 'z', 'l' },
                ListOfDateTime = new List<DateTime>() { DateTime.Now, DateTime.Now, DateTime.Now },
                ListOfDecimal = new List<decimal>() { (decimal)1.1, (decimal)12.1, (decimal)111121.1 },
                ListOfDouble = new List<double>() { 1231.123, 9957.3, 1290 },
                ListOfFloat = new List<float>() { (float)1, (float)1999.2, (float)99372.223423 },
                ListOfGuid = new List<Guid>() { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() },
                ListOfInt16 = new List<short>() { (short)12.99, (short)8832.2342, (short)871 },
                ListOfInt32 = new List<int>() { 3222, 2399, 991921 },
                ListOfInt64 = new List<long>() { 8923828348, 823828, 12171 },
                ListOfObject = new List<object>() { "stuff", 123, (float)11.121, new Version(12, 1, 1, 1) },
                ListOfString = new List<string>() { "this", "is", "a", "list", "of", "strings", "<this> is not xml <safe>" },
                ListOfUInt16 = new List<ushort>() { (ushort)1233, (ushort)1, (ushort)9957 },
                ListOfUInt32 = new List<uint>() { 299320, 23882, 18882850 },
                ListOfUInt64 = new List<ulong>() { 993929342, 823842, 231188 },
                ListOfMyMadeUpEnum = new List<MyMadeUpEnum>(){ MyMadeUpEnum.A, MyMadeUpEnum.C, MyMadeUpEnum.D}
            };
        }
    }
}
